package Server;

import java.io.IOException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

import Commons.Karte;

public class HaggisRandom {
	
	ArrayList<Karte> haggis = new ArrayList<>();
	ArrayList<Karte> vierzehnSpieler1 = new ArrayList<>();
	ArrayList<Karte> vierzehnSpieler2 = new ArrayList<>();
	boolean[] rot = new boolean[11];
	boolean[] grau = new boolean[11];
	boolean[] gruen = new boolean[11];
	boolean[] gelb = new boolean[11];
	
	public HaggisRandom(){
		haggis = new ArrayList<>();
		vierzehnSpieler1 = new ArrayList<>();
		vierzehnSpieler2 = new ArrayList<>();
		rot = new boolean[11];
		grau = new boolean[11];
		gruen = new boolean[11];
		gelb = new boolean[11];
	}


	

//	public static void main(String[] args) throws UnknownHostException,
//			IOException, ClassNotFoundException {
//		generateHaggisKarten();
//	}

	public void generateHaggisKarten() throws UnknownHostException,
			IOException, ClassNotFoundException {
		
		

		Karte[] handKarten = new Karte[14];
		
		for(Karte handKarte : handKarten)
		{
			handKarte = new Karte(0, 0, "");
			
		}
		handKarten = getDeck();
			
		
		
		

		for (int i = 0; i < handKarten.length; i++) {

			if (i > 27) {
				
				
				haggis.add(handKarten[i]);

			} else if (i > 13) {
				vierzehnSpieler1.add(handKarten[i]);

			} else {
				vierzehnSpieler2.add(handKarten[i]);
			}
		}
		
	}

	public String getZufallsFarbe(int kartenZahl) {
		Random rand = new Random();
		int zufallsZahl;

		while (true) {

			zufallsZahl = rand.nextInt(4) + 0;

			if (rot[kartenZahl] && zufallsZahl == 0) {
				rot[kartenZahl] = false;

				return "rot";
			} else if (grau[kartenZahl] && zufallsZahl == 1) {
				grau[kartenZahl] = false;

				return "grau";
			} else if (gruen[kartenZahl] && zufallsZahl == 2) {
				gruen[kartenZahl] = false;

				return "gruen";
			} else if (gelb[kartenZahl] && zufallsZahl == 3) {
				gelb[kartenZahl] = false;

				return "gelb";
			}

		}
	}

	public Karte[] getDeck() {
		Karte[] handKarten = new Karte[36];

		String[] joker = null;

		int zweier = 0;
		int dreier = 0;
		int vierer = 0;
		int fuenfer = 0;
		int sechser = 0;
		int siebener = 0;
		int achter = 0;
		int neuner = 0;
		int zehner = 0;

		for (int i = 0; i < rot.length; i++) {
			rot[i] = true;
		}

		for (int i = 0; i < grau.length; i++) {
			grau[i] = true;
		}

		for (int i = 0; i < gruen.length; i++) {
			gruen[i] = true;
		}

		for (int i = 0; i < gelb.length; i++) {
			gelb[i] = true;
		}

		for (int i = 0; i < 36; i++) {
			while (true) {
				int zufallszahlen = (int) (Math.random() * (10) + 1);

				// new Karte (PunkteZahl, Rang, Farbe)

				if (zweier <= 3 && zufallszahlen == 2) {
					handKarten[i] = new Karte(0, zufallszahlen,
							
							getZufallsFarbe(2));
					zweier++;

					break;
				} else if (dreier <= 3 && zufallszahlen == 3) {
					handKarten[i] = new Karte(1, zufallszahlen,
							getZufallsFarbe(3));
					dreier++;

					break;
				} else if (vierer <= 3 && zufallszahlen == 4) {
					handKarten[i] = new Karte(0, zufallszahlen,
							getZufallsFarbe(4));
					vierer++;

					break;
				} else if (fuenfer <= 3 && zufallszahlen == 5) {
					handKarten[i] = new Karte(1, zufallszahlen,
							getZufallsFarbe(5));
					fuenfer++;

					break;
				} else if (sechser <= 3 && zufallszahlen == 6) {
					handKarten[i] = new Karte(0, zufallszahlen,
							getZufallsFarbe(6));
					sechser++;

					break;
				} else if (siebener <= 3 && zufallszahlen == 7) {
					handKarten[i] = new Karte(1, zufallszahlen,
							getZufallsFarbe(7));
					siebener++;

					break;
				} else if (achter <= 3 && zufallszahlen == 8) {
					handKarten[i] = new Karte(0, zufallszahlen,
							getZufallsFarbe(8));
					achter++;

					break;
				} else if (neuner <= 3 && zufallszahlen == 9) {
					handKarten[i] = new Karte(1, zufallszahlen,
							getZufallsFarbe(9));
					neuner++;

					break;
				} else if (zehner <= 3 && zufallszahlen == 10) {
					handKarten[i] = new Karte(0, zufallszahlen,
							getZufallsFarbe(10));
					zehner++;

					break;
				}

			}

		}

		return handKarten;

	}

	public ArrayList<Karte> getVierzehnSpieler1() {
		Collections.sort(vierzehnSpieler1);
		return vierzehnSpieler1;
	}

	public void setVierzehnSpieler1(ArrayList<Karte> vierzehnSpieler1) {
		this.vierzehnSpieler1 = vierzehnSpieler1;
	}

	public ArrayList<Karte> getVierzehnSpieler2() {
		Collections.sort(vierzehnSpieler2);
		return vierzehnSpieler2;
	}

	public void setVierzehnSpieler2(ArrayList<Karte> vierzehnSpieler2) {
		this.vierzehnSpieler2 = vierzehnSpieler2;
	}

	public  ArrayList<Karte> getHaggisKarten() {
		
		return haggis;
	}

	public void setHaggisKarten(ArrayList<Karte> acht) {
		this.haggis = acht;
	}

}
